// pages/login/login.js
import { loginApi, getUserInfoApi } from "../../api/user";

const app = getApp();

Page({
  /**
   * 页面的初始数据
   */
  data: {},

  /*
    小程序授权登录：
      1. 调用 wx.login 接口得到 code 
        code 临时授权码，有效期 5 分钟
      2. 发送请求携带code给开发者服务器，开发服务器返回token
      
      开发者服务器：
        小程序发送请求携带code
        开发者服务器携带 appid appsecret code等参数，向微信服务器发送请求，得到 openid
          接口文档：https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
        开发者服务器根据openid判断用户是否创建过（注册过）
          创建过
          没有创建过，创建用户数据（生成随机用户名和头像）
        根据openid通过jwt加密算法加密生成token
        将token响应给小程序
      
      3. 请求得到token，将token持久化存储
      4. 发送请求将token参数，位于请求头携带上
  */
  login() {
    // 1. 调用 wx.login 接口得到 code
    wx.login({
      async success(res) {
        const code = res.code;
        // 2. 发送请求携带code给开发者服务器，开发服务器返回token
        const { token } = await loginApi(code);
        // 3. 请求得到token，将token持久化存储
        // 在 request.js 携带了 token 参数（位于请求头）
        wx.setStorageSync("token", token);

        // 4. 获取用户数据
        const { nickname, headimgurl } = await getUserInfoApi();

        wx.setStorageSync("user", {
          nickname: "法外狂徒张三",
          avatar: headimgurl,
        });

        app.globalData.hasLogin = true;

        // 5. 跳转回之前的页面
        wx.navigateBack();
      },
      fail() {
        wx.showToast({
          title: "授权登录失败",
          icon: "error",
        });
      },
    });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {},

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
